package servico;

import dao.GerenteDAO;
import dao.fabrica.FabricaDeDAOs;
import excecao.AplicacaoException;
import excecao.ObjetoDuplicadoException;
import excecao.ObjetoNaoEncontradoException;
import java.util.List;
import modelo.Gerente;
import modelo.Solicitacao;
import modelo.Usuario;

public class GerenteAppService {

    private static GerenteDAO gerenteDAO = FabricaDeDAOs.getDAO(GerenteDAO.class);
    private SolicitacaoAppService solicitacaoService;

    public void inclui(Gerente umGerente) throws AplicacaoException {
        try {
            gerenteDAO.inclui(umGerente);

        } catch (ObjetoDuplicadoException e) {
            throw new AplicacaoException("Gerente já cadastrado");
        }

    }

    public void altera(Gerente umGerente)
            throws AplicacaoException {
        try {
            gerenteDAO.altera(umGerente);

        } catch (ObjetoNaoEncontradoException e) {
            throw new AplicacaoException("Gerente não encontrado");

        }
    }

    public void exclui(long numero)
            throws AplicacaoException {
        try {

            Gerente Gerente = gerenteDAO.recuperaUmGerente(numero);

            gerenteDAO.exclui(Gerente);

        } catch (ObjetoNaoEncontradoException e) {

            throw new AplicacaoException("Gerente não encontrado");
        }
    }

    public Usuario recuperaUmGerente(long numero)
            throws AplicacaoException {
        try {

            Gerente umGerente = gerenteDAO.recuperaUmGerente(numero);

            return umGerente;
        } catch (ObjetoNaoEncontradoException e) {
            throw new AplicacaoException("Gerente não encontrado");
        }
    }

    public List<Gerente> recuperaUsuarios() {
        return gerenteDAO.recuperaGerentes();
    }

    public void deferirSolicitacao(Solicitacao solicitacao, Boolean resultado, String justificativa) throws AplicacaoException {
        solicitacao.setConfirmado(resultado);
        if (!resultado) {
            solicitacao.setJustificativa(justificativa);
            solicitacaoService.altera(solicitacao);
        } else {
            solicitacaoService.altera(solicitacao);
        }
    }
    
    
}